
package todolist.logic.parser;

import todolist.personalization.ErrorMessages;
import todolist.personalization.ReminderOffsetCustomizer;

/**
 * Parser of Reminder Offset information.
 * @author Ivan
 */
public class ReminderOffsetParser {
	
	private GenericParser _objGP;
	
	public ReminderOffsetParser() {
		_objGP = new GenericParser();
	}

	/**
	 * Tries to parse a String containing a Reminder Offset descriptor.
	 * Parse Result, which will never be null, returned.
	 */
	public ReminderOffsetParseResult parseReminderOffset(String pstrInput) {
		// no-match conditions, use default Reminder Offset
		ReminderOffsetCustomizer objROC = ReminderOffsetCustomizer.getInstance();
		ReminderOffsetParseResult objResult = new ReminderOffsetParseResult(objROC.getDefaultReminderOffset());
		if (pstrInput == null || pstrInput.trim().length() == 0)
			return objResult;
		pstrInput = pstrInput.trim();
		// parse input
		objResult.setError(ErrorMessages.ERR_INVALID_REMINDER); // assume reminder invalid
		objROC.rewindInputReminderOffset();
		while (objROC.hasNextInputReminderOffset()) {
			objROC.nextInputReminderOffset();
			if (_objGP.findMatch(objROC.getInputDescriptors(), pstrInput) != null) { // match found
				objResult.setReminderOffset(objROC.getInputValue());
				objResult.setError(null);
				return objResult;
			}
		}
		return objResult; // all phrases do not match but input not empty --> invalid reminder offset
	}
	
}
